/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package webRMI;

import AdminClienten.AdminArquivo;
import Cliente.web.WebArquivo;
import cliente.GereOperacoes;
import cliente.gui.Erro;
import common.Menssagem;
import common.OpErro;
import common.RespOut;

/**
 *
 * @author ziza
 */
public class WebGereOperacoes extends GereOperacoes {

    private WebArquivo arquivador = null;
    private AdminArquivo adArquivo = null;

    public WebGereOperacoes() {
        super();
        this.arquivador = new WebArquivo();
    }

    public WebArquivo getArquivador() {
        return arquivador;
    }

    public AdminArquivo getAdArquivo() {
        return adArquivo;
    }

    public void setArquivador(WebArquivo arquivador) {
        this.arquivador = arquivador;
    }

    public void setAdArquivo(AdminArquivo adArquivo) {
        this.adArquivo = adArquivo;
    }

    @Override
    public void trataMensagem(Menssagem sms) {

        if (sms instanceof RespOut) {
            RespOut depLogin = (RespOut) sms;

            System.out.println("Estou no trata mensagem:"+sms.getMenssagem());

            if (depLogin.getMenssagem().contains("login")) {
                doLogin(depLogin);
            }

            if (depLogin.getMenssagem().contains("register")) {
                doRegist(depLogin);
            }

            if (depLogin.getMenssagem().contains("Following")) {
                System.out.println("Estou no following");
                doFollowing(depLogin);
            }

            if (depLogin.getMenssagem().contains("Follower")) {
                System.out.println("Estou no follower");
                doFollowers(depLogin);
            }

            if (depLogin.getMenssagem().contains("Pesquisa")) {
                System.out.println("Estou no pesquisa");
                doSearch(depLogin);
            }

            if (depLogin.getMenssagem().contains("Mensagens")) {
                System.out.println("Estou no apresentar mensagens.");
                doTwitters(depLogin);
            }

            if (depLogin.getMenssagem().contains("Detalhes")) {
                System.out.println("Estou no apresentar detalhes.");
                doDetails(depLogin);
            }

            if (depLogin.getMenssagem().contains("Minhas")) {
                System.out.println("Estou no apresentar minhas mensagens.");
                doMyTwitters(depLogin);
            }

            if (depLogin.getMenssagem().contains("Loggout ok")) {
                System.out.println("Estou no loggout.");
                arquivador.setLoggout(false);
            }

            /*
             * ----------------------------------------
             *      Tratar das adicoes do Admin
             * ----------------------------------------
             */

            if(depLogin.getMenssagem().startsWith("Numero:")){
                System.out.println("Tenho num Tweets:"+depLogin.getMenssagem());
                numTweets(depLogin);
            }

            if(depLogin.getMenssagem().contains("Apagado com sucesso")){
                System.out.println("Apagado");
                doDelete(depLogin);
            }

            if(depLogin.getMenssagem().startsWith("Offline:")){
                System.out.println("Listar Offline");
                doOnOff(depLogin);
            }

            if(depLogin.getMenssagem().startsWith("Online:")){
                System.out.println("Listar Online");
                doOnOff(depLogin);
            }

        }
//        if (sms instanceof OpErro) {
//            OpErro problema = (OpErro) sms;
//            new Erro(problema.getTipo(), problema.getCausa());
//        }
    }

    @Override
    public void doLogin(RespOut depLogin) {

        if (depLogin.getEmissor().contains("Server") && depLogin.getMenssagem().equalsIgnoreCase("login ok")) {
            System.out.println("[INFO]Login efectuado com sucesso!!!" + depLogin.getReceptor());
            mandaCredenciais(depLogin);
            this.getArquivador().setLogin(depLogin);
            this.setNome(depLogin.getReceptor());
        }
    }

    @Override
    public void doRegist(RespOut depRegist) {
        if (depRegist.getEmissor().contains("Server") && depRegist.getMenssagem().equalsIgnoreCase("register ok")) {
            System.out.println("[INFO]Registo efectuado com sucesso!!!");
            this.setNome(depRegist.getReceptor());

            this.getArquivador().setRegisto(depRegist);

            mandaCredenciais(depRegist);

            //TODO verificar como e do ficheiro
            criaFile();

        }

    }

    @Override
    public void doFollowing(RespOut depRegist) {
        if (depRegist.getEmissor().contains("Server") && depRegist.getMenssagem().contains("Following")) {
            System.out.println("A tratar do following");


            System.out.println("Resposta:" + depRegist.getMenssagem());
            this.getArquivador().setFolloing(depRegist);
            System.out.println("Dados adicionados ao buffer.");



        }

    }

    @Override
    public void doFollowers(RespOut depFollowers) {
        if (depFollowers.getEmissor().contains("Server") && depFollowers.getMenssagem().contains("Follower")) {

            System.out.println("Resposta:" + depFollowers.getMenssagem());
            this.getArquivador().setFollowers(depFollowers);
            System.out.println("Dados adicionados ao buffer.");

        }
    }

    @Override
    public void doTwitters(RespOut depTwette) {
        if (depTwette.getEmissor().contains("Server") && depTwette.getMenssagem().contains("Mensagens")) {
            this.getArquivador().setSeeTweet(depTwette);
        }
    }

    @Override
    public void doSearch(RespOut depSearch) {
        if (depSearch.getEmissor().contains("Server") && depSearch.getMenssagem().contains("Pesquisa")) {
            System.out.println("Efectuou pesquisa!");
            this.getArquivador().setSearch(depSearch);
        }
    }

    @Override
    public void doDetails(RespOut depDetails) {
        if (depDetails.getEmissor().contains("Server") && depDetails.getMenssagem().contains("Detalhes")) {
            this.getArquivador().setDetails(depDetails);
        }
    }



//    @Override
//    public void mandaCredenciais(RespOut sms){
//        System.out.println("No manda credenciais!!!");
//        try {
//            this.getConexao().getHandling().adicionaLigado(this.getRecTwe(), sms.getReceptor());
//        } catch (RemoteException ex) {
//            System.out.println("[ERRO]Remote: Erro no envio das credenciais!\n"+ex.getMessage());
//            //ex.printStackTrace();
//        }
//    }
//
    public void tenhoSmsInst(Menssagem instantaneo) {
        arquivador.setTweet(instantaneo);
    }

    /*
     * ---------------------------------------------
     *      Administrador
     * ---------------------------------------------
     */
    public void doDelete(RespOut depDel) {

        if (depDel.getEmissor().contains("Server") && depDel.getMenssagem().contains("Apagado com sucesso")) {
            System.out.println("A substituir variavel");
            this.adArquivo.setRemove(depDel);
        }
    }

    public void doOnOff(RespOut depOnOff) {

        if (depOnOff.getEmissor().contains("Server") && depOnOff.getMenssagem().contains("Offline")) {
            this.adArquivo.setListar(depOnOff);
        }

        if (depOnOff.getEmissor().contains("Server") && depOnOff.getMenssagem().contains("Online")) {
            this.adArquivo.setListar(depOnOff);
        }
    }

    public void doInfoUser(RespOut depInfo) {

        if (depInfo.getEmissor().contains("Server") && depInfo.getMenssagem().contains("Informacao")) {
            this.adArquivo.setInfo(depInfo);
        }
    }

    public void numTweets(RespOut depNum) {

        if (depNum.getEmissor().contains("Server") && depNum.getMenssagem().contains("Numero")) {
            System.out.println("Entrei no if tem tweets:"+this.adArquivo);
            this.adArquivo.setNum(depNum);
        }
    }

    @Override
    public void doMyTwitters(RespOut depMyTwitters){
        if(depMyTwitters.getEmissor().contains("Server") && depMyTwitters.getMenssagem().contains("Minhas")){
            System.out.println("Entrei");
            this.adArquivo.setMyTweets(depMyTwitters);
        }
    }
}
